#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>


typedef struct node {
    int i;
    int cur;
} Node, StaticLinkList[100];

//初始化列表
bool initList(StaticLinkList space) {
    for (int i = 0; i < 99; i++) {
        space[i].cur = i + 1;
    }

    space[99].cur = 0;
    return true;
}


//返回分配节点的下标

int malloc_SLL(StaticLinkList space) {
    int i = space[0].cur;
    if (space[0].cur) {
        space[0].cur = space[i].cur;
    }
    return i;
}

//返回列表长度
int ListLenght(StaticLinkList L) {
    int j = 0;
    int i = L[99].cur;
    while (i) {
        i = L[i].cur;
        j++;
    }
    return j;
}

bool is_full(StaticLinkList spa) {
    return spa[0].cur == 99;
}

bool is_empty(StaticLinkList spa) {
    return spa[0].cur == 1;
}

bool insertListNode(StaticLinkList space, int pos, int val) {

    //还需要判断链表是否有空余位置

    if (is_full(space)) {
        printf("array is full");
        return false;
    }

    if (pos < 1 || pos > ListLenght(space) + 1) {
        return false;
    }

    int j = malloc_SLL(space);
    int k = 99;//数组最一个下标
    if (j) {
        space[j].i = val;
        for (int i = 1; i <= pos - 1; i++) {
            k = space[k].cur;
        }

        space[j].cur = space[k].cur;
        space[k].cur = j;
        return true;
    }
}

void Free_SSL(StaticLinkList L, int k) {
    L[k].cur = L[0].cur;
    L[0].cur = k;
}


bool deleteList(StaticLinkList L, int pos) {
    if (is_empty(L)) {
        printf("list is empty");
        return false;
    }

    int i, j;

    if (pos < 1 || pos > ListLenght(L)) {
        return false;
    }

    int k = 99;//数组最一个下标

    for (j = 1; j <= pos - 1; j++) {
        k = L[k].cur;
    }

    j = L[k].cur;
    L[k].cur = L[j].cur;
    Free_SSL(L, j);

}